/*
 * 登录注册页面相关操作
 */

const messageBox = new MessageBox({ root: '.tips', content: 'span' });
const form = document.querySelector('form');
const newPasswordInput = document.querySelector('p.new-password');

const initFunctionMap = {
	// 用户详情页面初始化
	detail: function() {
		// 初始化表单左边的label宽度，保证输入框对齐
		FormUtils.initLabelWidth(form);
		// 监听 '修改密码' 按钮的点击事件
		const updatePasswordButton = document.querySelector('.update-password');
		if (updatePasswordButton) {
			updatePasswordButton.addEventListener('click', updatePassword);
		}
	},
	// 注册页面初始化
	register: function() {
		// 验证码图片点击切换功能
		FormUtils.listenerCodeClick();
	}
};

const formSubmitEventMap = {
	login,
	register,
	update,
	detail: update,
};

// 根据所在页面执行对应的初始化事件
Object.keys(initFunctionMap).some(key => {
	if (location.pathname.includes(key)) {
		initFunctionMap[key]();
		return;
	}
});

// 根据所在页面绑定表单submit事件
Object.keys(formSubmitEventMap).some(key => {
	if (location.pathname.includes(key)) {
		form.addEventListener('submit', formSubmitEventMap[key]); 
		return;
	}
});

/**
 * 登录
 * @param {Event} event
 */
function login(event) {
	// 校验用户名
	let result = FormUtils.verifyUsername(form.username.value);
	if (!result.verified) {
		messageBox.show(result.message);
        event.preventDefault();
        return;
    }  
    // 校验密码
    result = FormUtils.verifyPassword(form.password.value);
    if (!result.verified) {
		messageBox.show(result.message);
        event.preventDefault();
        return;
    } 
    messageBox.hide();
}

/**
 * 注册
 * @param {Event} event
 */
function register(event) {
	// 校验用户名
	let result = FormUtils.verifyUsername(form.username.value);
	if (!result.verified) {
		messageBox.show(result.message);
        event.preventDefault();
        return;
    }  
    // 校验密码
    result = FormUtils.verifyPassword(form.password.value);
    if (!result.verified) {
		messageBox.show(result.message);
        event.preventDefault();
        return;
    } 
    // 确认密码
    result = FormUtils.verifyPassword(form.confirmPassword.value);
    if (!result.verified) {
		messageBox.show('确认' + result.message);
        event.preventDefault();
        return;
    } 
    if (form.confirmPassword.value !== form.password.value) {
		messageBox.show("两次密码不相同");
        event.preventDefault();
        return;
	}
	// 校验邮箱
    result = FormUtils.verifyEmail(form.email.value);
	if (!result.verified) {
		messageBox.show(result.message);
        event.preventDefault();
        return;
    }  
    // 校验验证码
    result = FormUtils.verifyCode(form.code.value);
    if (!result.verified) {
		messageBox.show(result.message);
        event.preventDefault();
        return;
    }  
    messageBox.hide();
}

/**
 * 修改用户信息
 * param {Event} event
 */
function update(event) {
	// 校验用户名
	let result = FormUtils.verifyUsername(form.username.value);
	if (!result.verified) {
		messageBox.show(result.message);
        event.preventDefault();
        return;
    }  
    // 校验邮箱
    result = FormUtils.verifyEmail(form.email.value);
	if (!result.verified) {
		messageBox.show(result.message);
        event.preventDefault();
        return;
    }  
    // 检测是否修改密码
    if (newPasswordInput && !newPasswordInput.classList.contains('hide')) {
		// 校验密码
		result = FormUtils.verifyPassword(form.password.value);
	    if (!result.verified) {
			messageBox.show('新' + result.message);
	        event.preventDefault();
	        return;
	    } 
	}
    messageBox.hide();
}

/**
 * 修改密码
 * @param {Event} event
 */
function updatePassword(event) {
	if (newPasswordInput.classList.contains('hide')) {
		newPasswordInput.classList.remove('hide');
		event.target.textContent = '放弃修改密码';
		return;
	} 
	newPasswordInput.classList.add('hide');
	event.target.textContent = '修改密码';
}
